package zeus.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Quarto implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5757861892977218447L;

	public Quarto(){
		this.statusQuarto = StatusQuarto.LIVRE;
		this.hospede = null;
		this.saiuAntes = false;
	}
	
	@Id
	@GeneratedValue
	private Long id;
	
	@OneToOne
	@JoinColumn(name="hospede_id")
	private Cliente hospede;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date horarioEntrada;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date horarioSaida;
	
	@Enumerated(EnumType.STRING)
	private TipoQuarto tipoQuarto;
	
	private boolean saiuAntes;
	
	private double preco;
	
	private int numero;
	
	@OneToMany(cascade= CascadeType.ALL, fetch=FetchType.EAGER)
	private List<Consumivel> consumiveis;

	@Enumerated(EnumType.STRING)
	private StatusQuarto statusQuarto;
	
	public TipoQuarto getTipoQuarto() {
		return tipoQuarto;
	}

	public void setTipoQuarto(TipoQuarto tipoQuarto) {
		this.tipoQuarto = tipoQuarto;
	}

	public Cliente getHospede() {
		return hospede;
	}

	public void setHospede(Cliente hospede) {
		this.hospede = hospede;
	}

	public double getPreco() {
		return preco;
	}

	public void setPreco(double preco) {
		this.preco = preco;
	}

	public List<Consumivel> getConsumiveis() {
		return consumiveis;
	}

	public void setConsumiveis(List<Consumivel> consumiveis) {
		this.consumiveis = consumiveis;
	}

	public Date getHorarioEntrada() {
		return horarioEntrada;
	}

	public void setHorarioEntrada(Date horarioEntrada) {
		this.horarioEntrada = horarioEntrada;
	}

	public Date getHorarioSaida() {
		return horarioSaida;
	}

	public void setHorarioSaida(Date horarioSaida) {
		this.horarioSaida = horarioSaida;
	}

	public StatusQuarto getStatusQuarto() {
		return statusQuarto;
	}

	public void setStatusQuarto(StatusQuarto statusQuarto) {
		this.statusQuarto = statusQuarto;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String consumiveisToString(){
		StringBuilder stringConsumiveis = new StringBuilder();
		
		for(Consumivel consumivel : this.consumiveis)
			stringConsumiveis.append(consumivel.getDescricao() + " - R$ " + consumivel.getPreco() + "\n");
		
		return stringConsumiveis.toString();
	}

	public boolean isSaiuAntes() {
		return saiuAntes;
	}

	public void setSaiuAntes(boolean saiuAntes) {
		this.saiuAntes = saiuAntes;
	}
	
	

}
